<?php
/**
 * 得到数组中的一个值.
 * @param $array
 * @param $key
 * @return mixed
 */
function get_array_value(&$array,$key, $prekey='')
{
	$result = $array[$key];
	if( !empty( $prekey ) )
	{
		return $result[ $prekey ];
	}
	return $result;
}
function getDataList($arr,$c="|",$type=4){
	$max  = intval(max_($arr));
	$list = "";
	$s = ceil($max/6);
	for($n=0;$n<=$max;$n=$n+$s)
	{
		$list.=$c.$n;
	}
	
	$list.=$c;
	
	switch($type)
	{
		case 1:
			$list = trim(&$list,$c);
			break;
		case 2:
			$list = ltrim(&$list,$c);
			break;
		case 3:
			$list = rtrim(&$list,$c);
			break;
		default:
	}
	return $list;
}

function getPeicent($beichu,$chu){
	$val = $beichu/$chu*100;
	$per = round($val);
	return $per;
}

function rJoin($c,$arr){
	
	$arr = array_reverse($arr);
	
	foreach($arr as &$item)
	{
		$item = mb_substr($item,0,10,'utf-8');
	}
	
	return join($c,$arr);
}
function rgetDataList($max,$cs,$c="|",$type=4){
	$list = "";
	
	if(empty($max))
	{
		return $list;
	}
	
	$max = $max%$cs==0?$max:($max+($cs-$max%$cs));
	$s   = $max/$cs;
	
	for($n=$max;$n>=0;$n=$n-$s)
	{
		$list.=$c.$n;
	}
	
	$list.=$c;
	
	switch($type)
	{
		case 1:
			$list = trim($list,$c);
			break;
		case 2:
			$list = ltrim($list,$c);
			break;
		case 3:
			$list = rtrim($list,$c);
			break;
		default:
	}
	return $list;
}

/**
 * @param $arr
 * @return unknown_type
 */
function max_($arr){
	$max = $arr[0];
	$len = count($arr);
	for($i=1;$i<$len;$i++){
		if($arr[$i]>$max)
		{
			$max = $arr[$i];
		}
	}
	return $max;
}



/**
 * @param $arr
 * @return unknown_type
 */
function min_($arr)
{
	$min = $arr[0];
	$len = count($arr);

	for($i=1;$i<$len;$i++)
	{
		if($ar[$i]<$min)
		{
			$min = $arr[$i];
		}
	}
}

function get_url($controller,$method)
{
	$args = func_get_args();
	$argc = func_num_args();

	if ($controller)
	{
		$controller = strtolower($controller);
	}

	if ($method)
	{
		$method     = strtolower($method);
	}

	if ($argc === 0)
	{
		return '';
	}
	elseif($argc == 1)
	{
		return '/' . $controller;
	}
	elseif($argc == 2)
	{
		if ( $method == 'index' || !$method )
		{
			return '/' . $controller;
		}
		else
		{
			if ( $controller )
			{
				return '/' . $controller . '/' . $method;
			}
			else
			{
				return '/';
			}
		}
	}

	if ( $method == 'index' )
	{
		$url = '/' . $controller;
	}
	else
	{
		$url = '/' . $controller . '/' . $method . '';
	}

	array_shift($args);
	array_shift($args);

	$argc -= 2;

	foreach($args as &$arg)
	{
		list($k, $v) = explode('=', $arg, 2);
		if ( $v && (strlen($v) != strlen(utf8_decode($v))) ) $v = urlencode($v);
		if ( $v )
		{
			$arg = implode('=', array($k, $v));
		}
		else
		{
			$arg = $k;
		}
	}

	if ( !empty($args) )
	{
		$url .= '?' . implode('&',$args);
	}
	return $url;
}

function get_style($style,$v1='',$v2='')
{
	if ($v1 == $v2)
	{
		return ' class="' . $style . '"';
	}
}

function make_url($url,$name,$value)
{
	$pattern = "/([?|&]" . preg_quote($name) . "=)([^&]*)/i";

	if(preg_match($pattern,$url))
	{
		return preg_replace($pattern,"\$1".$value,$url);
	}
	else
	{
		if ( strlen($url) < 2 || !preg_match('/\?/', $url ))
		{
			return $url . '?' . $name . '=' . $value;
		}
		else
		{
			return $url . '&' . $name . '=' . $value;
		}
	}
}

function getOperation( $val, $num, $op="+" )
{
	switch( $op )
	{
		case "+":
			return $val + $num;
		case "-":
			return $val - $num;
		case "*":
			return $val * $num;
		case "/":
			if( $num != 0 )
			{
				return $val / $num;
			}
			return null;
	}
}

function get_thumb($filename)
{
	$name = explode('.',$filename);

	return $name[0] . '_s.jpg';
	//return substr_replace($filename,'_s',strrpos($filename,'.'),0);
}

function get_day_of_week()
{
	$now = time();
	$dow = strftime('%u', $now);
	return intval($dow);
}

/**
 * 获得当前页面 URL
 */
function current_url()
{
	global $in_var;

	$c = $in_var['c'];
	$d = $in_var['d'];

	static $trival_keys = array('c', 'd', 'IP_ADDRESS', 'request_method');

	$param_array = array($c, $d);
	foreach($in_var as $k=>$v)
	{
		if ( !$k || in_array($k, $trival_keys) ) continue;
		$param_array[] = "$k=$v";
	}

	return 'http://' . get_domain() . call_user_func_array(get_url, $param_array);
}

function plus($a, $b)
{
	return $a + $b;
}

function sub($x, $y)
{
	return $x - $y;
}

function mul($x, $y)
{
	return $x * $y;
}

function divide($x, $y)
{
	return $x / $y;
}

function get_domain()
{
	return $_SERVER['SERVER_NAME'];
}

function getChbh($h,$arr){
	$len = count($arr);
	return round($h/$len);
}

/**
 * 通用时间格式化函数（目标是会返回类似“昨天 09:00 AM”这样的格式）
 * @param $timestamp
 * @param $type
 * @return string
 */
function get_time($timestamp, $type='long')
{
	if (!$timestamp)
	{
		return '';
	}

	$limit = time() - $timestamp;
	if ($type==='date' && $limit<86400)
	{
		return '今天';
	}
	if ($limit<60)
	{
		return '刚刚';
	}
	else if ($limit<3600)
	{
		return floor($limit/60) . '分钟前';
	}
	else if ($limit < 86400)
	{
		return floor($limit/3600) . '小时前';
	}
	else if ($limit<259200)
	{
		if ($type!='short')
		{
			$days = intval(floor($limit/86400));
			switch ($days)
			{
				case 1: return '昨天';
				case 2: return '前天';
			}
		}
	}
	else if ($limit<604800)
	{
		$days = intval(floor($limit/86400));
			
		return $days . '天前';
	}
	else if ($limit<2419200)
	{
		$week = intval(floor($limit/604800));
			
		return $week . '周前';
	}
	else if ($limit<3024000)
	{
		$month = intval(floor($limit/2419200));
			
		return $month . '月前';
	}
	else if ($limit>3024000)
	{
		return date('m-d', $timestamp);
	}

	switch ($type)
	{
		case 'short': return date('H:i:s', $timestamp);
		case 'date':  return date('Y-m-d', $timestamp);
		default:  return date('m-d', $timestamp);
	}
}

/**
 * 截止时间格式化函数
 * 输入一个截止时间戳，返回剩余的天、小时或者分数（如：2天、18小时29分、55分）
 * @param	time $timestamp	截止时间戳
 * @return	string
 */
function get_limit_time($timestamp)
{
	// 截止时间戳和当前时间戳的差值
	$sub_timestamp = $timestamp - time();

	// 如果截止时间戳小于当前的时间戳则返回fale
	if ($sub_timestamp < 0)
	{
		return false;
	}

	// 大于一天		显示格式：2天
	if ($sub_timestamp >= 86400)
	{
		return intval(floor($sub_timestamp/86400)).'天';
	}
	// 小于一天		显示格式：18小时29分
	elseif ($sub_timestamp >= 3600)
	{
		return intval(floor($sub_timestamp/3600)).'小时';
	}
	// 小于一个小时	显示格式：55分
	elseif ($sub_timestamp >= 60)
	{
		return intval(floor($sub_timestamp/60)).'分钟';
	}
	// 小于一分钟	显示格式：不到一分钟
	else
	{
		return '不到一分钟';
	}
}

/**
 * 根据指定的数组内位置、行列大小等信息获取在表格中的坐标
 * @param $i                元素在数组中的索引(0..N)
 * @param $count_per_row    表格每行格子数
 * @param $grid_width       格子宽度
 * @param $grid_height      格子高度
 * @param $gap_x            格子间的横向间距
 * @param $gap_y            格子间的纵向间距
 * @return array
 */
function get_grid_coords($i, $count_per_row=4, $grid_width=100, $grid_height=30, $gap_x=22, $gap_y=11)
{
	// 计算元素位置
	$row_N    = intval($i/$count_per_row);
	$column_N = intval($i%$count_per_row);

	// 计算坐标
	$x = $gap_x + $column_N*($grid_width+$gap_x);
	$y = $gap_y + $row_N*($grid_height+$gap_y);

	return array(
	$x,
	$y,
       'x' => $x,
       'y' => $y,
	);
}

function if_then_else($var_for_testing, $true_value, $false_value)
{
	return $var_for_testing ? $true_value : $false_value;
}

function tpl_assign($key, $value)
{
	global $tpl;
	$tpl->tpl_vars[$key] = $value;
}

function tpl_unset($key)
{
	global $tpl;
	unset($tpl->tpl_vars[$key]);
}

function format_money($money)
{
	return @intval(divide($money, 100));
}
